package ar.uba.fi.tecnicas.juego;

public class Tiempo 
{
	public final static Tiempo instancia = new Tiempo();
	
	private enum Estado
	{
		CORRIENDO,
		PAUSADO
	}

	private Estado estado;
	private long comienzo = 0;	
	private long acumulado = 0;
	
	private Tiempo()
	{
		this.estado = Estado.PAUSADO;

		this.empezarPausado();
	}
	
	public void empezar()
	{
		if(this.estado != Estado.CORRIENDO)
		{
			this.acumulado = 0;
			this.comienzo = System.currentTimeMillis();
			this.estado = Estado.CORRIENDO;
		}
	}
	
	public void empezarPausado()
	{
		if(this.estado != Estado.CORRIENDO)
		{
			this.acumulado = 0;
			this.estado = Estado.PAUSADO;
		}
	}
	
	public void pausar()
	{
		if(this.estado == Estado.CORRIENDO)
		{			
			this.acumulado += System.currentTimeMillis() - this.comienzo;
			this.estado = Estado.PAUSADO;
		}
	}
	
	public void reanudar()
	{
		if(this.estado == Estado.PAUSADO)
		{
			comienzo = System.currentTimeMillis();
			this.estado = Estado.CORRIENDO;
		}
	}
	
	public long transcurrido()
	{
		if(this.estado == Estado.CORRIENDO)
		{
			return System.currentTimeMillis() - this.comienzo + this.acumulado; 
		}

		return this.acumulado;
	}
}
